package huanzhao.erp.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import huanzhao.erp.domain.entity.Phone;
import huanzhao.erp.domain.types.PhoneReceiveType;
import huanzhao.erp.domain.types.PhoneState;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface PhoneMapper extends BaseMapper<Phone> {
    /**
     * 按条件查询手机信息
     *
     * @param state         手机状态
     * @param trackingBegin 收货运单号
     * @param IMEI          手机IMEI
     * @return List<Phone>
     * 2024/6/13 上午11:15:40
     */
    IPage<Phone> getPhonesByCondition(@Param("state") String state, @Param("trackingBegin") String trackingBegin, @Param("IMEI") String IMEI, IPage<?> page);

    List<Phone> getPhonesInBatch(@Param("ids") List<Long> ids);

    /**
     * 更新手机状态
     *
     * @param phoneId  手机id
     * @param newState 状态
     *                 2024/6/13 上午11:30:17
     */
    boolean updatePhoneState(@Param("phoneId") Long phoneId, @Param("newState") String newState, @Param("currentStates") String[] currentStates);

    /**
     * 设置手机的团队id
     *
     * @param phoneId 手机id
     * @param teamId  团队id
     * @return void
     * 2024/6/19 下午8:00:11
     */
    void setPhoneTeamId(@Param("phoneId") Long phoneId, @Param("teamId") Long teamId);

    /**
     * 获取未签收的手机
     *
     * @return List<Phone>
     * 2024/10/3 16:30:08
     */
    List<Phone> getUnsignedPhones();

    List<Phone> getByImei(@Param("imei") String imei);

    List<Long> getIdByImei(@Param("imei") String imei);

    List<Phone> getByImeiAndStateWhereExist(@Param("imei") String imei, @Param("state") String state);

    List<Long> getIdsByImeiAndStatesWhereExist(@Param("imei") String imei, @Param("states") String... states);

    Long getTeamById(@Param("phoneId") Long phoneId);

    /**
     * 获取手机价格
     *
     * @return BigDecimal
     * 2024/10/10 17:36:48
     */
    BigDecimal getPriceById(@Param("phoneId") Long phoneId);

    /**
     * 更新手机收货类型
     *
     * @param phoneId     手机id
     * @param receiveType 收货类型
     *                    2024/10/11 16:02:47
     */
    void updatePhoneReceiveType(@Param("phoneId") Long phoneId, @Param("receiveType") PhoneReceiveType receiveType);

    /**
     * 更新手机渠道
     * 2024/10/11 17:14:53
     */
    void updatePhoneTeam(@Param("phoneId") Long phoneId, @Param("teamId") long teamId);

    /**
     * 获取当前在系统中所有手机id
     * 不包括未签收、损坏、丢失以及发货出去的手机
     *
     * @return List<Long>
     * 2024/10/12 20:35:40
     */
    List<Long> getAllInSystemPhoneIds(@Param("imei") String imei);

    PhoneState getStateById(@Param("phoneId") Long phoneId);
    PhoneState getLastStateById(@Param("phoneId") Long phoneId);
}




